home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
STUTTGART
/
LANG
/
SCHEME
/
GNU
/
SCM4E1
/
!Scm
/
scm
/
turtle
< prev
Wrap
Text File
|
1994-08-02
|
2KB
|
130 lines
;
; Minimal demos of new turtling routines
; ams 31/7/94
; LPFC Software
;
; clunky way to draw squares
(define (square n)
(begin
(forward n)
(turn 90)
(forward n)
(turn 90)
(forward n)
(turn 90)
(forward n)
))
(define (ft)
(lambda () (begin (forward 100) (turn 90))))
;
; minimal repeat type command
;
(define (repeat e n)
(if (= 0 n)
'()
(begin
(e)
(repeat e (- n 1))
)))
;
; to try `repeat' >
; (repeat (ft) 4)
;
(define (triangle n)
(repeat (lambda () (begin (forward n)(turn 120))) 3))
;
; draw an object having `n' sides, with each side being `ls' long
; note inefficient - should use a (let ...) for the angle calculation
; (or memoise it..)
;
(define (n-obj n ls)
(repeat
(lambda ()
(begin
(forward ls)
(turn (trunc (- 360 (/ 360 n))))
))
n))
;
; Hit escape to stop this - basically to prove our plotting isn't lossy...
;
(define (demo-square)
(begin
(square 100)
(demo-square)
))
(define (hex n)
(begin
(forward n) (turn 60)
(forward n) (turn 60)
(forward n) (turn 60)
(forward n) (turn 60)
(forward n) (turn 60)
(forward n)
))
(define (trunc f) (inexact->exact (floor f)))
(define (koch d s)
(begin
(if (= 0 d)
(forward s)
(begin
(koch (- d 1) (trunc (/ s 3))) (turn -60)
(koch (- d 1) (trunc (/ s 3))) (turn 120)
(koch (- d 1) (trunc (/ s 3))) (turn -60)
(koch (- d 1) (trunc (/ s 3)))
))
))
(define (flake d s)
(begin
(koch d s)(turn 120)
(koch d s)(turn 120)
(koch d s)(turn 120)
))
(define (dragon d s)
(if (= d 0)
(forward s)
(if (> d 0)
(begin
(dragon (- d 1) (trunc s))
(turn 90)
(dragon (- 0 (- d 1)) (trunc s))
)
(begin
(dragon (- 0 (+ d 1)) (trunc s))
(turn 270)
(dragon (+ d 1) (trunc s))
)
)
))
;; try (rightkoch 5 500)
(define (rightkoch d s)
(if (= d 0)
(forward s)
(begin
(rightkoch (- d 1) (trunc (/ s 3))) (turn -90)
(rightkoch (- d 1) (trunc (/ s 3))) (turn 90)
(rightkoch (- d 1) (trunc (/ s 3))) (turn 90)
(rightkoch (- d 1) (trunc (/ s 3))) (turn -90)
(rightkoch (- d 1) (trunc (/ s 3)))
)))
(define (ccurve d s)
(if (= d 0)
(forward s)
(begin
(ccurve (- d 1) (trunc s)) (turn 90)
(ccurve (- d 1) (trunc s)) (turn -90)
)))